Mapping the Atari - Revised Edition, por Ian Chadwick

APÉNDICE DOCE


El mapa de memoria de los computadores XL/XE


La mayor parte de la información de la primera edición del libro Mapping the Atari se aplica igualmente a las líneas de computadoras XL y XE; solo las ubicaciones que se indican a continuación presentan cambios conocidos. Atari realizó varios cambios en las ubicaciones de la memoria RAM, y en los modelos más nuevos, el Sistema Operativo se reescribió casi por completo.

La información presentada aquí corresponde a los modelos 600XL, 800XL, 1200XL, 65XE y 130XE. A excepción del 1200XL, los modelos XL y XE son prácticamente idénticos. Se han hecho cambios en la ROM del BASIC, pero no tengo información oficial sobre cambios en el Sistema Operativo, aunque tengo motivos para creer hubo algunos.

Para quienes tengan computadoras XL y tengan dificultades para usar software antiguo de las computadoras modelo 800, Atari (y varias otras compañías) han fabricado un disco Translator que carga el Sistema Operativo del modelo 800 encima del XL, lo que permite ejecutar casi todos los programas de las computadoras modelo 800. Si aún no lo tiene, solicite este disco a su distribuidor local Atari. La cara A del disco Translator le permite el pulsar la tecla RESET y, por lo general, permanecer en el Sistema Operativo antiguo; la cara B no contiene este parche, por lo que al pulsar RESET se vuelve al Sistema Operativo XL. También en CompuServe se encuentra disponible un traductor de dominio público llamado FIXXL. También existe una solución hardware: el chip XL BOSS de Allen MacroWare.

El subprograma DDT del ensamblador MAC/65 de la compañía OSS es una herramienta excelente para examinar la memoria, especialmente porque permite visualizar y desensamblar el código ASCII que ésta contiene. Permite escribir directamente en la memoria o saltar a cualquier ubicación. Lo usé constantemente mientras escribía este capítulo.

A menos que se indique lo contrario, este material se aplica a todos los modelos XL y XE (al igual que gran parte de la sección anterior del libro). Las ubicaciones de la RAM, los vectores de interrupción y del Sistema Operativo se mantendrán iguales en todos los sistemas. Sin embargo, la ubicación y el contenido de las rutinas a las que apuntan pueden variar entre computadoras. No todas las ubicaciones de la ROM del Sistema Operativo descritas aquí serán las mismas en el 1200XL. Algunos de los cambios se refieren a vectores, no a funciones. Las referencias a las teclas de función (F1 a la F4) y a los LED son solo para usuarios del 1200XL. Mi mapa de memoria original del 1200XL apareció en el libro COMPUTE!'s Third Book of Atari.

En general, la mayoría de las ubicaciones de la RAM y del hardware de los chips GTIA, ANTIC, POKEY y PIA (ubicaciones 53248 a la 55295; $D000 a la $D7FF, excepto PORTB) no han cambiado. El paquete de coma flotante se mantiene en las ubicaciones 55296 a la 57343 ($D800 a la $DFFF), pero se han modificado sus rutinas. El cambio principal en el Sistema Operativo fue el traslado de los controladores de interrupciones desde la ROM alta al área previamente no utilizada entre las ubicaciones 49152 a la 52223 ($C000 a la $CBFF) y la adición del conjunto de caracteres internacionales en las ubicaciones 52224 a la 53247 ($CC00 a la $CFFF).

Atari promete que la serie XE mantendrá una compatibilidad total con la serie XL, siempre que el software cumpla las normas, se ajuste a los vectores y puntos de entrada oficiales publicados y no intente aprovechar alguna rutina de la ROM para ahorrar algunos bytes (véanse las ubicaciones 62026 y 62128 a continuación). El Sistema Operativo de la serie XE es el mismo que el del 800XL, al menos al momento de escribir este artículo. Cuando la rutina se mueve de ubicación en la ROM, el software falla. No culpen a Atari; han publicado este material desde el primer día. Si los desarrolladores no prestan atención, no es culpa de Atari.

Registros Eliminados


Los siguientes registros han sido eliminados por completo de las computadoras XL/XE y se han encontrado otros usos para la ubicación (se indican las ubicaciones 400/800 anteriores):

PTEMP(31; $1F)
LINBUF(583-622; $247-$26E)
CSTAT(648; $288)
TMPX1(668; $29C)
HOLD5(701; $2BD)
ADDCOR(782; $30E)

00

00

LNFLG

 

 

Utilizado por los programas de depuración internos de Atari y por el Sistema Operativo durante el encendido.

01

01

NGFLAG

 

 

Se utiliza durante las rutinas de encendido para el Self-Test; verifica si hay bytes de memoria defectuosos; cero significa falla de memoria.

07

07

CMCMD

 

 

Indicador de comando para los módems 835 y 1030 de Atari; establecida en cualquier número distinto de 0 para pasar comandos al módem. Anteriormente era TSTDAT.

10,11

A,B

DOSVEC

 

 

Apunta a la ubicación 6047 ($179F).

12,13

C,D

DOSINI

 

 

Apunta a la ubicación 5440 ($1540).

28-31

11C-1F

ABUFPT

 

 

Uso previsto del Sistema Operativo como punteros de búfers; actualmente sin uso.

54,55

36,37

LTEMP

 

 

Búferes temporales para las rutinas de carga de controladores de periféricos de propósito general. Estas rutinas ayudan al Sistema Operativo a gestionar nuevos controladores y periféricos que cargan los suyos. Todas las ubicaciones marcadas como utilizadas por el controlador o cargador de periféricos son de uso exclusivo del Sistema Operativo; no las utilice.

74,75

4A,4B

ZCHAIN

 

 

Registros de almacenamiento temporal para el cargador del controlador de periféricos de propósito general.

96,97

60,61

FKDEF

 

 

El 1200XL tiene cuatro teclas de función redefinibles. FKDEF apunta (byte menos significativo/byte más significativo) a su tabla de definiciones: una tabla de 8 bytes para las teclas F1 a la F4 y luego SHIFT-F1 a SHIFT-F4. A cada byte se le asigna un valor que corresponde a un código interno (distinto de ASCII). Estas teclas tienen valores del 138 al 141 ($8A-$8D), pero no se debe asignar un valor a una tecla de estas teclas, ya que se genera un ciclo infinito. Inicialmente apunta a 64529 ($FC11).

Las teclas de función realizan las siguientes acciones:

Combinación de teclasFunción
F1 Cursor hacia arriba (ATASCII 28; $1C)
F2 Cursor hacia abajo (29; $1D)
F3 Cursor hacia la izquierda (30; $1E)
F4 Cursor hacia la derecha (31; $1F)
Con SHIFT
F1 Inicio (cursor arriba a la izquierda, 28; $1C)
F2 Cursor a la esquina inferior izquierda (29; $1D)
F3 Cursor al inicio de la línea física (30; $1E)
F4 Cursor al extremo derecho de la línea física (31; $1F)
Con CONTROL
F1 Activación o desactivación del teclado (Excepto las teclas de la consola)
F2 Habilitar/deshabilitar la visualización de la pantalla
F3 Activar o desactivar el sonido del clic de la tecla F3
F4 Alternar conjunto de caracteres nacionales/internacionales

Las teclas de función se ignoran con la combinación de teclas SHIFT y CONTROL. No se pueden redefinir las teclas CONTROL-función.

98

62

PALNTS

 

 

Bandera para determinar la versión PAL o NTSC del controlador de pantalla, anteriormente en la ubicación 53268 ($D014). 0 significa estándar norteamericano.

121,122

79,7A

KEYDEF

 

 

Puntero (byte menos significativo/byte más significativo) a la tabla de definición del teclado. Su valor inicial es 64337 ($FB51), donde reside la tabla del teclado del sistema. Puede redefinir el teclado escribiendo una tabla de 192 bytes y poniendo su dirección aquí. La tabla consta de 3 partes de 64 bytes: teclas minúsculas, teclas con la tecla SHIFT, y teclas con la tecla CONTROL. La tabla del sistema tiene las siguientes asignaciones:

ByteTecla ByteTecla
00 1  32 ,
01 j  33 Espacio
02 ;  34 .
03 F1 (1200XL)  35 n
04 F2 (1200XL)  36 (128)
05 k  37 m
06 +  38 /
07 *  39 Tecla Video Inverso (114)
08 o  40 r
09 (128; vea más abajo) 41(128)
10 p  42 e
11 u  43 y
12 RETURN  44 TAB
13 i  45 t
14 -  46 w
15 =  47 q
16 v  48 9
17 HELP (128)  49 (128)
18 c  50 0
19 F3 (1200XL)  51 7
20 F4 (1200XL)  52 BACKSPACE
21 b  53 8
22 x  54 <
23 z  55 >
24 4  56 f
25 (128)  57 h
26 3  58 d
27 6  59 (128)
28 ESC  60 CAPS (130)
29 5  61 g
30 2  62 s
31 1  63 a

Los siguientes 64 bytes contienen los caracteres desplazados (shifted) (por ejemplo, "a" es A, "5" es %; observe los caracteres superiores de su teclado). Los siguientes 64 bytes son caracteres de la tecla CONTROL (muchos caracteres gráficos). Debe crear una tabla para los 192 bytes, aunque solo necesite cambiar la asignación de teclas para algunos caracteres específicos. Use los valores ATASCII al escribir la tabla.

Varios valores tienen un significado específico para el decodificador del teclado del XL:

Dec/HexUso
128/80 No utilizado; combinación inválida
129/81 Salida en video inverso
130/82 Alternar entre mayúsculas y minúsculas
131/83 Bloqueo de la tecla SHIFT
132/84 Bloqueo de la tecla CONTROL
133/85 Fin de archivo (EOF - End of File)
137/89 Alternar clic del teclado
138-141/8A-8D Teclas de función F1-F4 (solo 1200XL) o:
cursor hacia arriba (ATASCII 28; $1C)
cursor hacia abajo (ATASCII 30; $1D)
cursor a la izquierda (ATASCII 31; $1E)
cursor a la derecha (ATASCII 32; $1F)
142/8E Cursor al inicio (esquina superior izquierda de la pantalla)
143/8F Cursor a la esquina inferior izquierda
144/90 Cursor al margen izquierdo (1200)
145/91 Cursor al margen derecho (1200)

No se pueden redefinir las teclas BREAK, SHIFT, CONTROL ni las teclas de la consola (ni las asignaciones de las teclas de CONTROL-función en el 1200XL). El Addenda del 1200XL ofrece una asignación de teclado Dvorak que se guarda fácilmente en la memoria. La dirección de la tabla del sistema se devuelve a la RAM al encender o reiniciar el equipo.

128,129

80,81

LOMEM

 

 

Apunta a la ubicación 7676 ($1DFC1).


1 En el libro original, dice $$1DFC en vez de $1DFC. (N. del T.)

512-551

200-227

Vectores de las interrupciones

 

 

Las ubicaciones de los vectores y sus funciones siguen siendo las mismas, pero ahora apuntan a diferentes ubicaciones en la memoria del Sistema Operativo:

VectorHexEtiquetaApunta a
512,513200,201VDSLST49358 ($C0CE)
514,515202,203VPRCED49357 ($C0CD)
516,517204,205VINTER49357 ($C0CD)
518,519206,207VBREAK49357 ($C0CD)
520,521208,209VKEYBD64537 ($FC19)
522,52320A,20BVSERIN6691 ($1A23)
524,52520C,20DVSEROR6630 ($19E6)
526,52720E,20FVSEROC60140 ($EAEC)
528,529210,211VTIMR149357 ($C0CD)
530,531212,213VTIMR249357 ($C0CD)
532,533214,215VTIMR349357 ($C0CD)
534,535216,217VIMIRQ49200 ($C030)
546,547222,223VVBLKI49378 ($C0E2)
548,549224,225VVBLKD49802 ($C28A)
550,551226,227CDTMA160433 ($EC11)

El Sistema Operativo fue reescrito en los modelos XL/XE, moviendo los controladores de interrupciones a la región previamente no utilizada 49152-53247 ($C000-$CFFF).

563

233

LCOUNT

 

 

Contador temporal para el cargador del controlador periférico.

566,567

236,237

BRKKY

 

 

Ahora apunta a la ubicación 49298 ($C092).

568,569

238,239

RELADR(1200XL)

VPIRQ (Todos los XL/XE excepto 1200XL)

 

Anteriormente bytes sobrantes, ahora corresponde a la dirección de la rutina reubicable del cargador en el 1200XL y el vector para solicitudes de interrupción del bus paralelo en todos los XL/XE, excepto el 1200XL (donde apunta a una rutina en la ubicación 51566; $C96E) - el vector genérico para cualquier dispositivo paralelo inicializado.

581

245

RECLEN

 

 

Variable de rutina del cargador reubicable para la longitud del registro.

583-618

$247-$26A

....

 

 

Reservado (sin uso) en el 1200XL.

583

247

PDVMSK

 

 

Máscara del registro sombra del registro de selección de dispositivo en la ubicación 53759 ($D1FF; activa solo cuando el Sistema Operativo deselecciona la ROM de coma flotante escribiendo en esa dirección). Se pueden tener hasta 8 dispositivos funcionando en paralelo a través del bus; cada bit de este registro corresponde a un dispositivo. La máscara debe configurarse para el dispositivo correcto antes de que el Sistema Operativo permita el envío de una IRQ a dicho dispositivo.

584

248

SHPDVS

 

 

Registro sombra para el registro de bus paralelo; cada bit representa uno de los 8 dispositivos paralelos. Permite que el Sistema Operativo dé servicio a las VBI mientras ejecuta el dispositivo enmascarado por este bit.

585

249

PDMSK

 

 

Máscara de interrupción del bus paralelo; permite que el Sistema Operativo atienda las IRQ del dispositivo que ha sido enmascarado por el bit de este registro. Vea la ubicación de arriba.

586,587

24A,24B

RELADR

 

 

Dirección relativa del cargador reubicable.

588,589

24C,24D

PPTMPA,PPTMPX

 

 

Registros de almacenamiento temporal de un byte para el cargador reubicable.

590-618

24E-26A

....

 

 

Bytes sobrantes, reservados para uso futuro.

619

26B

CHSALT

 

 

Puntero del conjunto de caracteres alternativo para el 1200XL, inicializado en 204 ($CC) para indicar al conjunto de caracteres internacionales como el siguiente conjunto que se mostrará al alternar entre pulsaciones de las teclas CONTROL+F4. El XL tiene dos conjuntos de caracteres internos: uno en la ubicación 52224 ($CC00) y el otro en la ubicación 57344 ($E000).

620

26C

VSFLAG

 

 

Registro temporal de desplazamiento (scroll) fino.

621

26D

KEYDIS

 

 

Desactivación del teclado. Haga POKE en esta ubicación con 255 para desactivar el teclado, o con 0 para reactivarlo. Si se bloquea, debe pulsar la tecla RESET (todos los XL/XE excepto el 1200XL) para recuperar el control. Los usuarios del 1200XL pueden pulsar las teclas CONTROL-F1 (activa y desactiva el teclado; el LED 1 se enciende cuando el teclado está desactivado).

622

26E

FINE

 

 

Habilitar desplazamiento (scroll) fino para el modo gráfico 0 (texto); Haga POKE en esta ubicación con un 0 para el desplazamiento grueso (predeterminado) y 255 ($FF) para el desplazamiento fino. Después de este POKE, haga GR.0 o un OPEN para el dispositivo E:. Intente listar un programa largo: ¡es lento y fluido! La Lista de Despliegue para el desplazamiento fino es un byte más larga que para desplazamiento grueso. El Sistema Operativo coloca la dirección (64708; $FCC4) de una interrupción de Lista de Despliegue (DLI) en las ubicaciones 512 y 513 ($200 y 201), reemplazando cualquier otro valor que pudiera haber colocado allí. El registro de color en la ubicación 53271 ($D017) se modifica para la última línea visible de la pantalla.

Si activa el desplazamiento fino y accede inmediatamente a DOS, verá que sigue activado al copiar a la pantalla o al directorio del disco. Jerry White escribió un artículo que muestra el desplazamiento fino y otras funciones del XL en la revista Analog de febrero de 1984.

628-631

272-277

PADDL4-7

 

 

El XL tiene solo 2 puertos, por lo que solo los paddles del #0 al #3 están activos.

634-635

27A-27B

STICK2-3

 

 

Ya no se utiliza porque solo hay puertos para los joysticks #0 y #1. El proceso VBLANK del Sistema Operativo ahora copia los valores del joystick PORTA (0-1) y de los paddles (0-3) en los registros sombra de PORTB de modo que STICK0 afecta tanto a STICK0 como a STICK2, STICK1 afecta a STICK1 y STICK3, PADDL0 afecta a PADDL0 y PADDL4, y así sucesivamente.

640-643

280-283

PTRIG4-7

 

 

Sin uso (Vea PADDL4-7).

646-647

286-287

STRIG2-3

 

 

Sin uso (Vea STICK2-3).

648

288

HIBYTE

 

 

Registro del byte alto para la rutina del cargador reubicable.

651

28B

IMASK

 

 

Sin uso.

652

28C

JVECK

 

 

Vector de salto temporal; sin uso.

654,655

28E,28F

NEWADR

 

 

Utilizado por el cargador reubicable; nuevo vector de dirección.

668

29C

CRETRY

 

 

Número de reintentos del comando: originalmente en la ubicación 54 ($36) en los computadores 400/800.

701

2BD

DRETRY

 

 

Número de reintentos del dispositivo: originalmente en la ubicación 55 ($37) en los computadores 400/800.

713,714

2C9,2CA

RUNADR

 

 

Registro de dirección de ejecución para la rutina del cargador reubicable.

715,716

2CB,2CC

HIUSED

 

 

Utilizado por las rutinas del cargador reubicable.

717,718

2CD,2CE

ZHIUSE

 

 

Utilizado por las rutinas del cargador reubicable.

719,720

2CF,2D0

GBYTEA

 

 

Utilizado por las rutinas del cargador reubicable.

721,722

2D1,2D2

LOADAD

 

 

Utilizado por las rutinas del cargador reubicable.

723,724

2D3,2D4

ZLOADA

 

 

Utilizado por las rutinas del cargador reubicable.

725,726

2D5,2D6

DSCTLN

 

 

Registro de tamaño de sector de disco; el valor predeterminado es 128 ($80) bytes, pero se puede modificar a una longitud de entre 0 y 65535 ($FFFF). Sin embargo, es posible que su unidad no permita otros tamaños.

717,718

2D7,2D8

ACMISR

 

 

Dirección de rutina de servicio de interrupción; sin uso.

729

2D9

KRPDEL

 

 

Velocidad de retardo automático: el tiempo transcurrido antes de que comience la repetición del teclado. Inicialmente configurado en 48 ($30; $28 para los equipos PAL) para 0,8 segundos; puede ajustarlo con el número de intervalos VBLANK (1/60 de segundo cada uno) antes de que comience la repetición. Un valor de 60 corresponde a un retardo de 1 segundo. Un valor de 0 significa que no hay repetición.

730

2DA

KEYREP

 

 

La velocidad de repetición; el valor predeterminado es 6, lo que significa 10 caracteres por segundo (uno cada 6 intervalos VBLANK después del retardo indicado). Ajuste el número de intervalos VBLANK entre repeticiones; con un valor de 1, obtendrá 60 caracteres por segundo (50 en sistemas PAL). Un valor de 0 proporciona solo una repetición de tecla por pulsación.

731

2DB

NOCLIK

 

 

Este es el registro de desactivación de los clics del teclado; haga POKE en esta ubicación usando cualquier número distinto de 0 para desactivar el molesto sonido del teclado que se produce en el televisor. Haga POKE con 0 en esta ubicación para activar el sonido. En el 1200XL, CONTROL+F3 también activa el sonido.

732

2DC

HELPFG

 

 

Registro que contiene el estado de la tecla HELP; 17 significa que se presionó sola, 81 significa que se presionó junto con la tecla SHIFT y 145 con la tecla CONTROL. Este registro solo se puede borrar bajo control del programa haciendo POKE con 0 en esta ubicación. De lo contrario, el Sistema Operativo lo ignora.

733

2DD

DMASAV

 

 

En el 1200XL, al presionar CONTROL-F2 para desactivar la pantalla, esta ubicación almacena el valor de la ubicación DMA (559;$22F). En todos los computadores XL/XE, excepto el 1200XL, si se hace POKE 559,0 para desactivar la pantalla, el valor no se guarda en la ubicación 733. Sin embargo, si se hace POKE en la ubicación 733 con el valor de la ubicación DMA (normalmente 34), al presionar la siguiente tecla, la pantalla se activará de nuevo automáticamente.

734

2DE

PBPNT

 

 

Puntero del búfer de impresión; originalmente en la ubicación 29 ($1D) en los computadores 400/800.

735

2DF

PBUFSZ

 

 

Tamaño del búfer de impresión: originalmente en la ubicación 30 ($1E) en los computadores 400/800.

745

2E9

HNDLOD

 

 

Bandera del controlador de la rutina del cargador reubicable.

746-749

2EA-2ED

DVSTAT

 

 

Registros de estado de dispositivo adicionales que contienen la información que el periférico devuelve al computador tras los nuevos sondeos del tipo 3 y 4. Los bytes contienen:

746/747 byte menos significativo/byte más significativo del tamaño del controlador (debe ser un número par)

748 Dirección SIO del dispositivo que se utilizará para la carga

749 Número de revisión del dispositivo periférico

Los nuevos tipos de sondeo se explican detalladamente en el manual del Sistema Operativo del 1200XL; los tipos de sondeo anteriores se describen en el manual de hardware del 400/800. Básicamente, el tipo 3 es un sondeo de tipo "¿estás ahí?" (dirección del dispositivo $4F, byte de comando $40, AUX1 $4F, AUX2 $4F, suma de comprobación normal), y el sondeo 4 es un sondeo nulo (valores $4F, $40, $4E y $4E, respectivamente; suma de comprobación normal).

756

2F4

CHBAS

 

 

Selección del conjunto de caracteres; el valor predeterminado es 224. El conjunto internacional se puede seleccionar haciendo POKE 756,204 ($CC). En el 1200XL, el valor de CHBAS se intercambia con el de CHSALT (619; $26B) al usar CONTROL+F4 para alternar entre los conjuntos de caracteres alternativos. Los valores de ambos registros se intercambian y el LED 2 se enciende.

757

2F5

NEWROW

 

 

Originalmente 96 ($60) en los computadores 400/800.

758,759

2F6,2F7

NEWCOL

 

 

Originalmente en las ubicaciones 97,98 ($61,$62) en los computadores 400/800.

760

2F8

ROWINC

 

 

Originalmente 121 ($79) en los computadores 400/800.

761

2F9

COLINC

 

 

Originalmente 122 ($7A) en los computadores 400/800.

782

30E

JMPERS

 

 

Almacenamiento para los jumpers (puentes) de opciones de hardware del 1200XL, diseñado para indicar la configuración del sistema al Sistema Operativo. Si el bit 0 (POT 4) no está configurado (es igual a 0), se ejecutará el Self-Test. Los bits 1 al 7 no se utilizan. Solo se utilizan en el 1200XL.

787

313

TEMP2

 

 

Registro de almacenamiento temporal de un byte.

788

314

PTIMOT

 

 

Originalmente en la ubicación ($1C) en los computadores 400/800. Mismo valor inicial (30).

829-831

33D-33F

PUPBT1-3

 

 

Registros 1 al 3 de la validación de encendido y reinicio. Se utilizan en el arranque en caliente para verificar la integridad de la memoria. El Sistema Operativo inicializa estas ubicaciones en 92 ($5C), 147 ($93) y 37 ($25), respectivamente. Al pulsar la tecla RESET, se comprueban estos bytes y, si coinciden con los inicializados, se realiza un arranque en caliente; de lo contrario, se realiza un arranque en frío.

838,839

346,347

IOCB0

 

 

Para enviar la salida a la impresora, haga POKE 838,202 y POKE 839,254. Para apagar la impresora y enviar todo de vuelta a la pantalla, haga POKE 838,175 y POKE 839,242. Este programa de Matt Ratcliff permite alternar entre la salida de la impresora y la pantalla pulsando la tecla SELECT (funciona igual de bien en los computadores 400/800):

10 DIM A$(1):CONSOL=53279:GRAPHICS 0:IOCB0E=838
20 PHDLR=58422
30 EHDLR=58374
40 PL=PEEK(PHDLR):PH=PEEK(PHDLR+1)
50 EL=PEEK(EHDLR):EH=PEEK(EHDLR+1)
60 PRINT "El texto se imprime de manera continua"
70 PRINT "Presione SELECT para alternar entre"
80 PRINT "salida por impresora y pantalla.":?
90 PRINT "Prepare su impresora y presione RETURN"
100 INPUT A$:I=1:DIR=0
110 PRINT I;" Presione select para cambiar salida.":I=I+1
120 IF PEEK(CONSOL)<>5 THEN 110
130 IF DIR THEN POKE IOCB0E,EL:POKE IOCB0E+1,EH
140 IF NOT DIR THEN POKE IOCB0E,PL:POKE IOCB0E+1,PH
150 DIR= NOT DIR
160 IF PEEK(CONSOL)<>7 THEN 160
170 GOTO 110

1000

3E8

SUPERF

 

 

Registro del editor de pantalla; se borra al ingresar a la rutina "poner byte", el editor cambia los códigos de teclas 142 y 145 ($8E y $91) a 28 y 31 ($1C y $1F; vea la ubicación 121; $79) y establece SUPERF en un valor distinto de 0.

1001

3E9

CKEY

 

 

Originalmente en la ubicación ($4A) en los computadores 400/800.

1002

3EA

CASSBT

 

 

Originalmente en la ubicación 75 ($4B) en los computadores 400/800.

1003

3EB

CARTCK

 

 

Suma de comprobación del cartucho. Suma de comprobación de la Página Uno del cartucho. La suma de comprobación se recalcula cada VBLANK y se compara con este registro. Si no es la misma, el Sistema Operativo asume que el cartucho ya no está (se extrajo) y realiza un arranque en frío; solo para 1200XL.

1004

3EC

DERRF

 

 

Bandera de error de pantalla abierta; si es igual a 0, entonces no hay error; si es distinto de 0, entonces el Sistema Operativo no puede inicializar el editor de pantalla.

1005-1015

3ED-3F7

ACMVAR

 

 

Reservado para las variables del Sistema Operativo; durante el encendido o el arranque en frío, todas las variables entre las ubicaciones 1005 y 1023 ($3ED y $3FF), inclusive, se establecen en 0, pero no se modifican durante el arranque en caliente.

1016

3F8

BASICF

 

 

Registro sombra del estado actual del BASIC. 0 significa que la ROM del BASIC está habilitada; un valor distinto de 0 significa que no lo está. Debe estar sincronizado con la desactivación de la ROM del BASIC. Para desactivar BASIC, configure BASICF en un valor distinto de 0 y realice un arranque en caliente (pulse la tecla RESET); el DOS cargará y le indicará que no hay cartucho presente al intentar volver al BASIC.

1017

3F9

MINTLK

 

 

Sin uso.

1018

3FA

GINTLK

 

 

Registro entrelazado (interlock) del cartucho; complemento de la ubicación BASICF, un poco más arriba. Es igual a 1 cuando hay un cartucho externo instalado, e igual a 0 cuando no lo hay (o si se usa la ROM del BASIC). El valor de TRIG3 (53267; $D103) se carga aquí mediante la rutina de inicialización del Sistema Operativo. Si en algún momento se extrae el cartucho externo, el sistema se bloqueará.

Uso de la cadena de controladores reubicables; permite encadenar partes de rutinas de controladores.

1792-7419

700-1CFB

....

 

 

Utilizado por DOS cuando éste se carga; de lo contrario, disponible como RAM libre.

3889

F31

DOS 3

 

 

Si hace PEEK en esta ubicación y se observa el valor 76 ($4C), entonces tiene una versión anterior de DOS 3 (la última versión mostrará 78). Para corregir algunos errores en los archivos FMS anteriores, escriba lo siguiente:

10 FOR N=1 A 9:READ A,B:POKE A,B:NEXT N
20 DATA 3889,78,3923,78,3943,78,3929,76,3895,76
30 DATA 3901,77,3935,77,3955,77,2117,240

Mejor aún, consígase el DOS 2.5 de Atari (compatible con discos de doble densidad y el disco RAM del 130XE). DOS 3.0 guarda en bloques, no en sectores, con un mínimo de 1.000 bytes por bloque. Si escribe un programa de 1.001 bytes, se guardan 2.000 bytes, desperdiciando 999 bytes en el disco.

20480-22527

$5000-$57FF

ROM del Self-Test

 

 

ROM del Self-Test, cuando está habilitado; controlado por el bit 7 de la ubicación PORTB (54017; $D301). El código del Self-Test se encuentra en un área especial de la ROM debajo del área de los chips GTIA, POKEY y ANTIC (a partir de la ubicación 53248; $D3000) y se traslada (reasigna) aquí al escribir BYE en BASIC o al usar POKE en el puerto B con el valor correcto y hacer JMP (o USR) al vector de inicialización (véase las ubicaciones 58481; $E471 y 58496 a la 58499, $E480 a la $E483). Corresponde a memoria RAM cuando el Self-Test no está habilitado.

39967-40959

9C1F-9FFF

....

 

 

Lista de Despliegue y RAM de pantalla, movidas a la memoria inferior si un cartucho tiene 16K (usando RAM de 32767 a 49151 también).

43234

A8E2

ROM del BASIC

 

 

Si hace PEEK en esta ubicación y obtiene el valor 96 ($60), tiene la Revisión B de la ROM del BASIC. Lo que necesita es la Revisión C. ¡B significa errores (Bugs)! Consulte el Apéndice 13 sobre mejoras y errores. Si obtiene el valor 234 ($EA), tiene la Revisión C. Aporte de Matt Ratcliff.

Puede desactivar BASIC al acceder a DOS y haciendo POKE en esta ubicación con el valor 1016 ($3F8) y luego presionando la tecla RESET. El problema es volver a activarlo desde DOS en lugar de reiniciar el sistema. Hay un programa de dominio público de Matt Ratcliff en el BBS Gateway que hace esto automáticamente.

Introducción a la ROM del Sistema Operativo


Atari modificó la nueva ROM del los XL/XE a partir de la Revisión B. Atari mantuvo el controlador y los vectores de interrupción, aunque cambiaron las rutinas a las que apuntan. Atari elaboró un listado del código fuente del Sistema Operativo XL, aunque por alguna razón nunca se publicó para la venta pública, tal como estaba previsto. Puede que ya esté disponible a través de Atari: escriba y solicítelo. Es un excelente recurso de más de 500 páginas.

49152-52223

C000-CBFF

Controladores de las interrupciones

 

 

ROM del Sistema Operativo. En los computadores 400/800, el bloque entre las ubicaciones 49152 y 53247 no se utiliza. Ahora, esta área contiene muchos de los controladores de las interrupciones (referenciados por los vectores de la Página Dos). Algunos programas de los computadores 400/800 comprueban ciertos valores en estas ubicaciones y no se ejecutan si no los encuentran. En ese caso, utilice el disco Translator (con el Sistema Operativo del 400/800 instalado; el área entre las ubicaciones $C000 y $CEFF se convierte en RAM accesible para el usuario). El área entre las ubicaciones 52069 ($CB65) y 52223 ($CBFF) está vacía (solo ceros).

Muchas interrupciones están configuradas para saltar a la ubicación 49357 o 49358 ($C0CD o $C0CE). La primera contiene una instrucción PLA seguida de una RTI. El resultado final es un simple retorno al programa sin ninguna otra actividad. Los bytes 49152 al 49163 ($C000 al $C00B) se utilizan para identificar la computadora y la ROM en el bloque $C000-$DFFF:

ByteUso
49152-3/C000-1 Suma de comprobación (byte menos significativo/byte más significativo) de todos los bytes de la ROM excepto los propios bytes de la suma de comprobación.
49154/C002 Fecha de la revisión, almacenada en formato DDMMYY. El día, DD, generalmente es igual a $10.
49155/C003 Mes de la fecha de la revisión; generalmente es igual a $05.
49156/C004 Año de la fecha de la revisión; generalmente es igual a $83.
49157/C005 Byte de opción reservada; igual a 0 para el 1200XL, el 800XL y el 130XE.
49158/C006 Número de pieza en formato AANNNNNN; AA es un carácter ASCII y NNNNNN es un número BCD de cuatro bits. Este es el byte A1.
49159-62/C007-A Número de pieza, bytes A2, N1-N6 (cada byte tiene 2 valores N de 4 bits cada uno).
49163-C00B Número de revisión. Mis modelos 800XL y 130XE devuelven 2 en esta ubicación.
49164/C00C Inicialización del controlador de interrupciones
49176/C018 Inicialización de la NMI

Controladores de las interrupciones y otras rutinas en el bloque $C000:

EntradaControlador o Uso
49196/C02CProcesador de las IRQ
49298/C092IRQ de la tecla BREAK
49312/C0A0Continuar el procesamiento de la IRQ
49359/C0CFTabla de tipos y desplazamientos de las IRQ (16 bytes)
49378/C0E2Procesamiento de la NMI del VBLANK inmediato
49743/C24FProcesar el vencimiento de la cuenta regresiva del temporizador #1
49890/C2E2Procesar el vencimiento de la cuenta regresiva del temporizador #2
49749/C255Decremento de la cuenta regresiva del temporizador
49778/C272Establecimiento de parámetros de VBLANK
49802/C28AProcesamiento de la NMI del VBLANK diferido
49808/C290Arranque en caliente
49834/C2AAProcesamiento de RESET
49864/C2C8Arranque en frío
49866/C2CAMemoria preestablecida (continuación del arranque en frío y en caliente)
50217/C429Inicialización del software del cartucho
50220/C42CProcesamiento de la interrupción ACMI
50237/C43DMensaje BOOT ERROR
50248/C448Especificación del editor de pantalla (E:)
50251/C44BTabla de vectores del controlador de interrupciones (mismo orden que los vectores de la RAM en las ubicaciones 512 a la 549 ($200 a la $225)
50289/C471Rutinas de inicialización diversas: Estado de la tecla OPTION comprobado en la ubicación 50330 ($C49A); BASIC habilitado en 50337 ($C4A1)
50394/C4DAInicialización del hardware
50485/C535Inicialización de variables de software y RAM
50571/C58BIntentar arrancar del disco
50619/C5BBArrancar e inicializar el disco
50633/C5C9Completar el arranque e inicializar
50729/C629Ejecutar el cargador de arranque
50747/C63BInicializar el software de arranque
50750/C63EMostrar mensaje BOOT ERROR
50777/C659Obtener la rutina del siguiente sector
50798/C66EIntentar arrancar del cassette
50851/C6A3Inicializar DIO (Disk Input/Output - Entrada/Salida del disco)
50867/C6B3E/S del disco (DIO)
51002/C73AEstablecer dirección de búfer
51013/C745Reubicar rutina reubicable a nueva dirección
51093/C795Gestionar tipo de registro final
51151/C7CFObtener byte
51154/C7D2Ejecutar "ejecutar en la dirección"
51157/C7D5Gestionar registro de texto
51281/C851Reubicar texto en memoria
51309/C86DManejar tipo de registro de referencia de palabra (word)
51346/C892Manejar tipos de registro de un byte y de byte bajo
51452/C8FCSeleccionar y ejecutar Self-Test
51468/C90CInicializar dispositivo paralelo genérico
51507/C933PIO: E/S del dispositivo paralelo; las tablas de vectores PIO (consulte la ubicación 58368, $E400) comienzan en la ubicación 51601 ($C991)
51631/C9AFSeleccionar el siguiente dispositivo paralelo
51658/C9CAInvocar controlador de dispositivo paralelo
51753/CA29Cargar e inicializar el controlador periférico
51799/CA57Inicio del desplazamiento y textos del Self-Test (utiliza valores hardware para la visualización de caracteres)
52054/CB56Tabla de vinculación de suma de comprobación

52224-53247

CC00-CFFF

CHARSET2

 

 

Juego de caracteres internacionales, estructurado de la misma manera que el juego de caracteres estándar de la ubicación 57344 (E000). La serie XL incluye 2 juegos de caracteres, y se puede cambiar entre ellos haciendo POKE 756,224 (estándar) o POKE 756,204 (internacional).

53279

D01F

CONSOL

 

 

Si mantiene presionada la tecla OPTION al iniciar una aplicación en el computador XL, se deshabilita el BASIC (pero ningún otro cartucho), lo que permite que el espacio de memoria se use para aplicaciones. Por lo general, debe mantener la tecla presionada solo durante los primeros segundos del arranque.

53504-53759

D100-D1FF

....

 

 

Esta área, que el Sistema Operativo no utiliza en los modelos 400/800 ni XL, se desactiva cuando se selecciona un dispositivo externo conectado al bus de expansión y se activa la memoria del dispositivo. La situación se invierte cuando se completa la E/S del dispositivo.

UbicaciónHexadecimalUso
53504-53758 D100-D1FERegistros del dispositivo
53504 D100 Registro hardware para obtener y poner un byte (HWGET, HWPUT); los datos del dispositivo que se encuentran en el bus se almacenan aquí.
53505 D101 Reinicio del hardware y registro de estado (HWRSET para escritura; esto reinicia el registro de obtener y poner un byte; HWSTAT para lectura).
53759 D1FF Registro de selección de hardware. Su registro sombra es el byte 583 ($247). El bit 0 corresponde al dispositivo 0, el bit 1 al dispositivo 1, y así sucesivamente. Escribir en este byte deselecciona la ROM del paquete FP y selecciona la ROM del dispositivo (intente visualizar esta y las ubicaciones subsiguientes con el DDT de MAC/65 o una herramienta similar mientras modifica la ubicación $D1FF).

54017

D301

PORTB

 

 

Dado que las series XL y XE ya no tienen un PORT B (en los modelos 400/800 este controla los puertos de joystick #3 y #4), este registro se utiliza para el control de LED (sólo 1200XL) y la gestión de memoria.

Puede desactivar la ROM entre las ubicaciones 49152 a la 53247 ($C000 a la $CFFF) y 55296 a la 65535 ($D800 a la $FFFF) estableciendo en 0 el bit 0 (el área de la ROM se convierte en RAM; tenga en cuenta que el área entre $D000 y $D7FF permanece intacta). Sin embargo, a menos que se haya proporcionado otro Sistema Operativo, el sistema se bloqueará en la siguiente interrupción (¡1/60 de segundo después!), por lo que primero debe desactivar las interrupciones.

El bit 1 controla el BASIC; si es igual a 0, BASIC está habilitado; si es igual a 1, está deshabilitado y los 8K de RAM están disponibles para el uso del programa. Si deshabilita BASIC dentro de un programa BASIC, se bloquea. Deshabilite BASIC durante el arranque manteniendo presionada la tecla OPTION.

Los bits 2 y 3 controlan los LEDs del modelo 1200XL; 0 significa encendido, 1 significa apagado.

El LED #1 indica que el teclado está desactivado; el LED #2 indica que se seleccionó el conjunto de caracteres internacionales. En el modelo 130XE, estos bits se utilizan para la conmutación de bancos (bank switching) de 16 KB de RAM. El 130XE permite usar la memoria adicional como memoria de vídeo o memoria de programa o datos. Consulte la sección sobre gestión de memoria del 130XE al final de este capítulo.

Los bits 4 al 6 están reservados (sin uso) en los modelos XL y 65XE. Los bits 4 y 5 en el modelo 130XE se utilizan para habilitar la conmutación de bancos de memoria (vea más abajo).

El bit 7 controla la región de la RAM desde la ubicación 20480 a la 22527 ($5000 a la $57FF), normalmente habilitada (igual a 1). Cuando está deshabilitada (igual a 0), se habilita la ROM del Sistema Operativo en esa área y el acceso al código del Self-Test se traslada de la ubicación 53248 a la 55295 ($D000 a la $D7FF).

Pruebe esto: Haga POKE 54017,PEEK(54017)-128 para activar el Self-Test de la ROM. Ahora escriba X=USR(20480). Aparece la pantalla del Self-Test. La RAM se reinicia al encender o al arrancar en caliente. Por supuesto, también puede escribir BYE para acceder a las rutinas del test.

Aquí tiene un programa de Joe Miller de Koala Technologies que copia partes (omite el bloque $D000-$D7FF) del Sistema Operativo en la RAM, desactiva la ROM y luego mueve la parte copiada hacia atrás en la memoria:

100 REM RAMROM - Instala en un computador XL
110 REM el Sistema Operativo basado en RAM
120 REM por Joe Miller
130 REM 23 de Marzo de 1985
190 PRINT "MOVIENDO EL SISTEMA OPERATIVO A LA RAM"
200 FOR I=1536 TO 1635
210 READ B:POKE I,B:NEXT I
220 B=USR(1536)
230 PRINT CHR$(125)
240 PRINT "SISTEMA OPERATIVO INSTALADO EN LA RAM"
250 PRINT "PRESIONE RETURN PARA COMPROBARLO"
260 PRINT :PRINT :PRINT
270 PRINT "POKE 57344,1"
275 PRINT "     $E000=1":PRINT
280 PRINT "POKE 57344,0"
290 POSITION 1,4
300 DATA 169,0,133,203,133,205,169
310 DATA 192,133,204,169,64,133,206
320 DATA 160,0,177,203,145,205,200
330 DATA 208,249,230,206,230,204,240
340 DATA 12,165,204,201,208,208,237
350 DATA 169,216,133,204,208,231,8
360 DATA 120,173,14,212,72,169,0
370 DATA 141,14,212,173,1,211,41
380 DATA 254,141,1,211,169,192,133
390 DATA 206,169,64,133,204,177,203
400 DATA 145,205,200,208,249,230,204
410 DATA 230,206,240,12,165,206,201
420 DATA 208,208,237,169,216,133,206
430 DATA 208,231,104,141,14,212,40
440 DATA 104,96

Puede convertir esto en un archivo AUTORUN.SYS en lenguaje máquina cambiando el ciclo a 1634, eliminando el número 104 de la línea 440 y eliminando la llamada USR de la línea 220. Vaya al DOS y guarde en un archivo binario (opción K) el contenido de las direcciones $600 a la $662, con la dirección de ejecución igual a $600. Esto cambiará su Sistema Operativo de la ROM a la RAM cada vez que inicie ese disco. Al pulsar la tecla RESET, el Sistema Operativo vuelve a la ROM. El código fuente en lenguaje máquina de este breve programa (también de Joe Miller) se incluye aquí porque consideré importante que los programadores en lenguaje máquina vieran cómo se hace:

;Mueve a la RAM el Sistema Operativo del modelo XL
;
;RAMROM: Instala en la RAM el Sistema 
;  Operativo basado en ROM del modelo XL,
;  en el mismo espacio de direcciones.
;  Esto resulta útil para realizar pequeñas
;  modificaciones al sistema operativo o 
;  para experimentar con nuevos conceptos 
;  de diseño, como multitarea, la gestión 
;  de ventanas, etc.
;
;    Por Joe Miller.
;
;Esta version se configura como
;un archivo AUTORUN.SYS.
;
ORIGEN  EQU     $CB             ;usar Página Cero
DESTINO EQU     ORIGEN+2
INICIO  EQU     $0600           ;direccion de comienzo
OSROM   EQU     $C000           ;direccion de comienzo del OS en ROM
OSRAM   EQU     $4000           ;direccion del DESTINOino en la ROM
NMIEN   EQU     $D40E           ;registro de habilitacion de NMI
PORTB   EQU     $D301           ;bloqueo del control de la admin. de memoria
        ORG     INICIO
        LDA     #low OSROM
        STA     ORIGEN
        STA     DESTINO         ;direcciones de inicializacion de la copia
        LDA     #high OSROM
        STA     ORIGEN+1
        LDA     #high OSRAM
        STA     DESTINO+l
        LDY     #0
                                ;Repetir
Paso1   LDA     (ORIGEN),Y      ;copiar ROM a la RAM
        STA     (DESTINO),Y
        INY
        BNE     Paso1 
        INC     DESTINO+1
        INC     ORIGEN+1
        BEQ     Swap            ;Si termina
        LDA     ORIGEN+l
        CMP     #$D0
        BNE     Paso1           ;saltar bloque de 2K en la ubicacion $D000
        LDA     #$D8
        STA     ORIGEN+1
        BNE     Paso1           ;Hasta que ORIGEN = $0000
Swap    PHP                     ;guardar el estado del procesador
        SEI                     ;deshabilitar IRQs
        LDA     NMIEN
        PHA                     ;guardar NMIEN
        LDA     #0
        STA     NMIEN           ;deshabilitar NMIs
        LDA     PORTB
        AND     #$FE            ;apagar las ROMs
        STA     PORTB           ;(dejando BASIC
                                sin cambios!)
        LDA     #high OSROM
        STA     DESTINO+1       ;configurar bloque de copia
        LDA     #high OSRAM
        STA     ORIGEN+1
                                ;Repetir
Paso2   LDA     (ORIGEN),Y      ;mover el OS de la RAM a una ubicacion apropiada
        STA     (DESTINO),Y
        INY
        BNE     Paso2
        INC     ORIGEN+1        ;mover a la siguiente pagina
        INC     DESTINO+1
        BEQ     Habilit         ;Si se completa
        LDA     DESTINO+1 
        CMP     #$D0
        BNE     Paso2           ;saltar bloque en la ubicacion $D000
        LDA     #$D8
        STA     DESTINO+1
        BNE     Paso2           ;Hasta que DESTINO = $000
Habilit PLA
        STA     NMIEN           ;restablecer la mascara de la NMI
        PLP                     ;volver a habilitar las IRQs
        RTS
        END     INICIO

El BBS Gateway de St. Louis, Missouri cuenta con un sofisticado programa gratuito de Matt Ratcliff llamado "RamMaster".

Este no solo crea un Sistema Operativo en RAM, sino que también incluye una trampa para mantenerlo así incluso después de pulsar la tecla RESET. También permite activar y desactivar BASIC desde el DOS. Probablemente la solución más elegante sea la placa XL BOSS, que permite activar y desactivar BASIC con solo pulsar unas teclas. Está disponible en Allen MacroWare en Redondo Beach, California.

Al convertir la memoria del Sistema Operativo de ROM a RAM, puede modificarlo por completo, salvo una pequeña parte, entre las ubicaciones 53248 a la 55295 ($D000 a la $D7FF), ya que es RAM. Siempre puede escribir su propio SO, cargarlo en RAM, desactivar la ROM e instalarlo. Puede cambiar los conjuntos de caracteres a sus ubicaciones originales en lugar de tener que moverlos y usar más memoria. Puede reescribir los controladores, las interrupciones y otras rutinas; prácticamente cualquier cosa.

Esto es exactamente lo que hace el disco Translator al escribir el Sistema Operativo 800 en el modelo XL. Arranque el Translator e inserte un disco DOS normal cuando aparezca el mensaje READY en BASIC. Ahora escriba:

10 FOR N=57344 TO 57351
20 READ A:POKE N,A:NEXT N
30 DATA 255,1,1,1,1,1,1,1

Verá una pantalla de "tablero gráfico": Ha hecho POKE directamente en el conjunto de caracteres en la ubicación $E000, modificando el primer carácter (espacio). Esto también significa que el área que va desde la ubicación 49152 a la 52991 ($C000 a la $CEFF) no se utiliza: casi 4K de RAM libre para gráficos player/missile, rutinas de lenguaje máquina y cualquier otra función que necesite. Tenga cuidado de no sobrepasar los controladores de interrupciones en la ubicación 52992 ($CF00).

54019

D303

PBCTL

 

 

El control del PORT B ​del 400/800; sin uso, ya que no hay uno en la serie XL/XE.

54528-54783

D500-D5FF

....

 

 

No se utiliza en los modelos XL ni 400/800. Cualquier acceso de lectura o escritura a esta área habilita la línea de control del cartucho (CCNTL), como en la interfaz del cartucho del modelo 400/800.

55296-57343

D800-DFFF

FP

 

 

Paquete de coma flotante; aunque corregido, el punto de entrada sigue siendo el mismo que en el 400/800. Ahora se produce un error al intentar obtener un LOG(0) o un LOG10(0). Esta área se vuelve direccionable por el dispositivo cuando el Sistema Operativo conmuta la ROM para realizar operaciones de E/S en un dispositivo conectado a la ranura de expansión.

Hay varias tablas integradas en el paquete FP:

DirecciónTabla
56909/DE4DCoeficientes de potencia de 10
57202/DF72Coeficientes logarítmicos
57262/DFAECoeficientes de arcotangente (¿sin uso?)

Cuando se selecciona un dispositivo externo conectado a través del bus, el Sistema Operativo desactiva el paquete de coma flotante y activa la ROM de la interfaz del bus paralelo (PBI), y luego lo vuelve a activar al finalizar la E/S. Esto significa que un dispositivo externo no puede usar el paquete de coma flotante ni ningún otro software (como el BASIC).

Los primeros 26 bytes del área del vector ROM de hardware (cuando la ROM del Sistema Operativo no está seleccionada) son:

ByteHexUso
55296/55297D800/D801Suma de comprobación de la ROM (byte menos significativo/byte más significativo) (opcional)
55298 D802 Número de revisión de la ROM (opcional)
55299 D803 Número de identificación (128; $80)
55300 D804 Tipo de dispositivo (opcional)
55301 D805 Instrucción JMP ($4C)
55302/55303D806/D807Vector de E/S (byte menos significativo/byte más significativo)
55304 D808 JMP
55305/55306D809/D80AVector de interrupción (byte menos significativo/byte más significativo)
55307 D80B Número de identificación (145; $91)
55308 D80C Nombre del dispositivo en ASCII (opcional)
55309/55310D80D/D80EVector abierto (byte menos significativo-1/byte más significativo)
55311/55312D80F/D810Vector cerrado (byte menos significativo-1/byte más significativo)
55313/55314D811/D812Obtener byte (byte menos significativo-1/byte más significativo)
55315/55316D813/D814Poner byte (byte menos significativo-1/byte más significativo)
55317/55318D815/D816Vector de estado (byte menos significativo-1/byte más significativo)
55319/55320D817/D818Vector especial (byte menos significativo-1/byte más significativo)
55321 D819 JMP
55322/55323D81A/D81BVector de inicialización (byte menos significativo/byte más significativo)
55324 D81C Sin uso

En un arranque en frío, el Sistema Operativo busca dispositivos paralelos y, si encuentra uno, envía con un JMP (hasta 55321; $D819) a la rutina INIT en 55322/55323 ($D81A, $D81B), que coloca la dirección del controlador de dispositivo paralelo genérico en las tablas de controladores con el nombre del dispositivo.

57344-58367

E000-E3FF

CHARSET1

 

 

Conjunto de caracteres estándar (doméstico); predeterminado al encender el equipo o al apretar la tecla RESET; la ubicación 756 ($2F4) apunta acá.

58368-65535

E400-FFFF

OS

 

 

El Sistema Operativo se ha reescrito y modificado considerablemente a partir del 400/800. Los chips ANTIC, PIA y POKEY son los mismos, pero se han trasladado muchas rutinas del Sistema Operativo. Los vectores en la RAM se han mantenido prácticamente intactos, por lo que el software que utiliza estas ubicaciones puede ejecutarse en todas las máquinas. Al escribir software para usar rutinas del Sistema Operativo, utilice siempre los vectores, nunca las rutinas en sí; estas pueden cambiar, mientras que los vectores no.

Las ubicaciones 58368 a la 58495 ($E400 a la $E47F) aún contienen las tablas de vectores, pero apuntan a ubicaciones diferentes a las del Sistema Operativo de los modelos 400/800 (para más información, consulte la sección 400/800). Todos los vectores (excepto JMP) apuntan a la dirección de la rutina menos 1:

Dispositivo y ubicaciónAbrirCerrarObtenerPonerEstadoEspecialJMP a
E: 58368 $E400 EF93 F2D2 F249 F2AF F21D F2C2 EF6E
S: 58384 $E410 EF8D F2D2 F17F F1A3 F21D F9AE EF6E
K: 58400 SE420 F21D F21D F2FC F22C F21D F22C EF6E
P: 58416 $E430 FEC1 FF06 FEC0 FECA FEA2 FEC0 FE99
C: 58432 $E440 FCE5 FDCE FD79 FDB3 FDCB FCE4 FCDB

Los vectores JMP en las ubicaciones 58448 a la 58533 ($E450 a la $E4A52) siguen siendo los mismos, pero apuntan a nuevas direcciones de vectores3:

EtiquetaUbicaciónJMP a
DISKIV E450C6A3
DISKINVE453C6B3
CIOV E456E4DF
SIOV E459C933
SETVBV E45CC272
SYSVBV E45FC0E2
XITVBV E462C28A
SIOINV E465E95C
SENDEV E468EC17
INTINV E46BC00C
CIOINV E46EE4C1
SELFSVE471F223 (antes era BLKBVD)
WARMSV E474C290
COLDSV E477C2C8
RBLOKV E47AFD8D
CSOPIV E47DFCF7

Varias de estas son ubicaciones que hacen JMP hacia otras rutinas, y se hizo de esta manera para mantener la compatibilidad con el antiguo Sistema Operativo 800.

Se han agregado nuevos vectores fijos de puntos de entrada:

58496/E480 PUPDIV: Entrada a la pantalla de encendido (modo de Self-Test en todas los modelos XL/XE excepto el 1200XL; visualización del logotipo de Atari en el 1200XL). Pruebe X=USR(58496). Apunta a la ubicación 61987 ($F223).
58499/E483 SLFTSV: Solo 1200XL: acceso al modo de Self-Test. Apunta a la ubicación 20480 ($5000) (vea PORTB más arriba).
58502/E486 PENTV: Entrada al controlador cargada desde un periférico o disco. Apunta a la ubicación 61116 ($EEBC).
58505/E489 PHUNLV: Entrada a la desvinculación del controlador cargado. Apunta a la ubicación 59669 ($E915).
58508/E48C PHINIV: Entrada a la inicialización del controlador cargado. Apunta a la ubicación 59544 ($E898).


2 En el libro original, dice 58583 en vez de 58533 y dice $E4D7 en vez de $E4A5. (N. del T.)

3 En la tabla del libro original, dice SETBV en vez de SETVBV; dice SYSBV en vez de SYSVBV; y dice XITBV en vez de XITVBV. (N. del T.)

58481

E471

SELFTST

 

 

Para acceder al modo Self-Test, en BASIC se escribe BYE o X = USR(58481). Este solía ser el modo pizarrón (o Bloc de notas), una función que los padres usaban para entretener a sus hijos, evitando que manipularan el sistema o los programas. En el 1200XL, esta corresponde a la ubicación de la pantalla del logotipo. Echo de menos el modo pizarrón; el Self-Test no es muy útil. No existe un modo equivalente al pizarrón en los sistemas XL/XE.

58511

E48F

GPDVV

 

 

Vector genérico de propósito general del controlador de dispositivos paralelos. Puede usarlo para comunicarse con cualquier dispositivo del puerto de expansión; transfiera esta dirección a HATABS (794 a la 831; $31A a la $33F) junto con un nombre de dispositivo apropiado, como V: o T:. Consulte el apéndice sobre el bus de expansión. Esta tabla tiene 7 vectores, correspondientes a las tablas de vectores de la ubicación 583684 ($E400).


4 En el libro original, dice 58348 en vez de 58368. (N. del T.)

58528-58560

E4A0-E4C0

....

 

 

Área en blanco (todos ceros).

58561

E4C1

ICIO

 

 

Inicializar CIO.

58588

E4DC

IIN

 

 

Rutina de error IOCB no abierto.

58591

E4DF

CIO

 

 

El área del CIO incluye las siguientes rutinas:

DirecciónRutina
58640/E510Error de dispositivo inexistente
58645/E515Cargar controlador de periférico para OPEN (abrir)
58650/E51AEjecutar comando CIO
58687/E53FEjecutar comando OPEN
58716/E55CInicializar IOCB para hacer OPEN
58742/E576Periférico de sondeo para hacer OPEN
58748/E57CEjecutar comando CLOSE (cerrar)
58775/E597Ejecutar comandos STATUS y SPECIAL
58802/E5B2Ejecutar comando GET (obtener)
58910/E610Ejecutar comando PUT (poner)
58992/E670Establecer estado
58994/E672Completar operación CIO
59029/E695Calcular punto de entrada del controlador
59067/E6BBDecrementar la longitud del búfer
59080/E6C8Decrementar el puntero del búfer
59089/E6D1Incrementar el puntero del búfer
59096/E6D8Establecer la longitud final del búfer
59114/E6EAEjecutar comando del controlador
59124/E6F4Invocar controlador de dispositivo
59135/E6FFBuscar tabla de controladores
59158/E716Buscar controlador de dispositivo

59193

E739

PHR

 

 

Cargador de controladores de los periféricos. Incluye las siguientes rutinas:

DirecciónRutina
59193/E739Inicialización
59326/E7BERealizar sondeo (poll)
59358/E7DEControlador de carga
59414/E816Rutina de obtención de bytes
59443/E833Obtener el siguiente bloque de carga
59485/E85DBuscar cadena del controlador
59540/E894Inicialización de arranque en caliente del controlador
59544/E898Inicialización de arranque en caliente en cadena
59550/E89EInicialización de arranque en frío
59584/E8C0Inicializar el controlador y actualizar MEMLO
59648/E900Inicializar el controlador
59669/E915Desvinculación del controlador

59740

E95C

SIO

 

 

La sección SIO incluye las siguientes rutinas:

DirecciónRutina
59740/E95CInicialización
59761/E971Rutina principal de SIO
59946/EA2AOperación SIO completa
59959/EA37Esperar la finalización o ACK
60040/EA88Enviar búfer al bus serie
60077/EAADProceso de salida serie IRQ listo
60140/EAECProceso de salida serie completo
60157/EAFDRecibir
60199/EB27Indicar tiempo de espera
60204/EB2CProceso de entrada serie IRQ listo
60295/EB87Establecer punteros del búfer
60317/EB9DProcesar E/S del cassette
60433/EC11Vencimiento del temporizador
60439/EC17Habilitar envío de SIO
60480/EC40Habilitar recepción de SIO
60502/EC56Configurar envío o recepción
60548/EC84Deshabilitar envío o recepción
60570/EC9AObtener tiempo de espera del dispositivo
60585/ECA9Tabla de controladores de interrupciones SIO (6 bytes)
60591/ECAFEnviar a dispositivo inteligente
60608/ECC0Establecer temporizador y esperar
60616/ECC8Calcular la tasa de baudios
60718/ED2EAjustar el valor de VCOUNT
60733/ED3DEstablecer la velocidad inicial en baudios
60871/EDC7Procesar tecla BREAK
60898/EDE2Establecer parámetros de VBLANK del SIO

60921

EDF9

TPFV

 

 

Tabla de valores de frecuencia de POKEY (24 bytes).

60945

EE11

NTSC/PAL

 

 

Tabla de valores constantes.

60957

EE1D

Tablas

 

 

Tablas de memoria de pantalla y de Listas de Despliegue.

DirecciónTabla
60957/EE1DAsignación de memoria de pantalla
60973/EE2DMostrar el recuento de entradas en la lista
61005/EE4DModos gráficos ANTIC
61021/EE5DVulnerabilidad de la Lista de Despliegue
61037/EE6DRecuento de desplazamiento a la izquierda
61053/EE7DRecuento de columnas del modo
61069/EE8DRecuento de filas del modo
61085/EE9DRecuento de desplazamiento a la derecha
61101/EEADMáscaras de visualización

61116

EEBC

PHE

 

 

Entrada del controlador periférico, incluye las siguientes rutinas:

DirecciónRutina
61177/EEF9Sondeo PH al hacer OPEN
61222/EF26Rutina de colocación de bytes para IOCB abierto de manera provisoria

61294

EF6E

SIN

 

 

Rutina de inicialización de pantalla. Incluye otras rutinas de gestión de pantalla:

DirecciónRutina
61326/EF8EEjecutar OPEN (abrir) de la pantalla
61332/EF94Ejecutar OPEN del editor
61340/EF9CCompletar comando OPEN
61824/F180Rutina de obtención de byte de la pantalla
61839/F18FObtener datos bajo el cursor
61860/F184Rutina de colocación de bytes en pantalla
61828/F184Verificación del final de línea
61898/F1CADibujar punto
61929/F1E9Desplegar
61960/F208Establecer condiciones de salida
61982/F21ESTATUS (Estado) de la pantalla
61997/F22DSPECIAL (especial) del editor de la pantalla (solo RTS)
61998/F22ECLOSE (cerrar) del editor de la pantalla
62026/F24AObtener byte del Editor (vea más abajo)
62128/F2B0Poner byte del Editor (vea más abajo)
62142/F2BEProcesar carácter

62026

F24A

GETCHAR

 

 

Nueva ubicación para la rutina "obtener carácter" (anteriormente estaba en la ubicación 63038). Si usa las rutinas de visualización por pantalla del libro Machine Language for Beginners, deberá cambiar esta dirección para que funcione correctamente en los modelos XL.

62128

F2B0

OUTCHAR

 

 

Nueva ubicación de la rutina "poner carácter". Consulte la nota en la ubicación 62026. Varios programas utilizan una llamada no válida a las rutinas "obtener carácter" y "poner carácter", anteriormente en las ubicaciones 63038 y 63140 ($F63E y F6A4), ahora en las ubicaciones 62026 y 62128 ($F24A y $F2B0), respectivamente. Es posible que pueda corregir algunos problemas en su software buscando y reemplazando los vectores antiguos con las nuevas ubicaciones.

62200

F2F8

IGN

 

 

Ignorar el carácter y realizar la operación de obtención de bytes mediante el teclado.

62205

F2FD

KGB

 

 

Rutina obtener byte del teclado. El controlador del teclado incluye las siguientes rutinas:

DirecciónRutina
62432/F3E0Controlador del carácter Escape
62438/F3E6Mover el cursor hacia arriba
62451/F3F3Mover el cursor hacia abajo
62464/F400Mover el cursor a la izquierda
62474/F40AMover el cursor al margen derecho
62476/F40CEstablecer columna de cursor
62481/F411Mover el punto del cursor
62491/F41BMover el cursor al margen izquierdo
62496/F420Limpiar la pantalla
62528/F440Mover el cursor a la posición inicial (esquina superior izquierda)
62586/F47AControlador del carácter Tabulación
62613/F495Establecer tabulación
62618/F49ALimpiar tabulación
62623/F49FInsertar carácter
62677/F4D5Eliminar carácter
62732/F50CInsertar línea
62752/F52DEliminar línea
62806/F556Sonar el timbre
62815/F55FCursor hacia abajo
62821/F565Decremento doble del byte doble
62825/F569Almacenar datos para el desplazamiento (scroll) fino
62840/F578Decremento simple de byte doble
62880/F5A0Establecer entrada desplazable de la Lista de Despliegue
62892/F5ACConvertir la fila/columna del cursor en dirección
62986/F60ARutinas de cursor avanzadas
63073/F661Retorno con desplazamiento
63077/F665Retorno
63150/F6AERestar punto final
63164/F6BCComprobar las rutinas del rango del cursor
63256/F718Restaurar datos antiguos bajo el cursor

63267

F723

BMI

 

 

Rutinas de mapa de bits para el editor y el controlador de pantalla.

63479

F7F7

SCR

 

 

Rutinas de desplazamiento (scroll) de la pantalla.

63665

F8B1

CBC

 

 

Rutinas de cálculo de conteo del búfer; varias rutinas del teclado, editor y pantalla, incluyendo:

DirecciónRutina
63768/F918Eliminar línea
63804/F93CVerificar carácter de Control
63820/F94CGuardar valores de filas y columnas
63831/F957Restaurar fila y columna
63842/F962Intercambiar cursor con posición del cursor normal
63875/F983Sonido clic de la tecla
63895/F997Colocar el cursor en el borde izquierdo
63910/F9A6Establecer la dirección del contador de escaneo de memoria
63919/F9AFEjecutar comando SPECIAL de pantalla

64260

FB04

TMSK

 

 

Aquí comienzan varias tablas de la pantalla y del teclado:

DirecciónTabla
64260/FB04Máscaras de bits
64264/FB08Colores de pantalla predeterminados (PF0-3, BAK)
64269/FB0DRutinas de caracteres de control (cada entrada tiene 3 bytes; carácter de control y dirección de 2 bytes de la rutina de procesamiento)
64317/FB3DRutinas de teclas de función con Shift (1200XL)
64329/FB49Constantes de conversión ATASCII a código interno
64333/FB4DConstantes de conversión de código interno a ATASCII
64337/FB51Definición del teclado (vea más abajo)
64529/FC11Definiciones de las teclas de función

64337

FB51

....

 

 

Inicio de la tabla de definición de teclado de 192 bytes; consulte las ubicaciones 121 y 122 ($79 y $7A).

64537

FC19

KIR

 

 

Rutinas de procesamiento de IRQ del teclado; verificación y procesamiento de caracteres, CONTROL-1, tecla HELP, teclas CONTROL y de función (1200XL; aunque el código para las teclas de función permanece en los modelos 800XL y XE)

64708

FCC4

FDL

 

 

Procesamiento de la interrupción de Lista de Despliegue para el desplazamiento fino.

64728

FCD8

CIN

 

 

Rutina de inicialización del cassette, seguida de las rutinas de E/S de cassette y una tabla de constantes NTSC/PAL para la longitud del líder del archivo y la duración del pitido.

65177

FE99

PIN

 

 

Rutinas de inicialización de impresora y E/S que incluyen:

DirecciónRutina
65218/FEC2Abrir impresora
65227/FECBByte de transferencia de la impresora
65261/FEEDLlenar el búfer de la impresora
65270/FEF6Hacer PUT en la impresora
65287/FF07Cerrar la impresora
65300/FF17Configurar DCB para la impresora
65348/FF44Tiempo de espera de la impresora desde STATUS
65355/FF4BModo de impresión de proceso

65395

FF73

VFR

 

 

Rutinas de verificación de suma de comprobación de la ROM para el primer banco de 8K.

65426

FF92

VSR

 

 

Rutinas de verificación para la suma de comprobación de la ROM, segundo banco de 8K, incluidas las rutinas para examinar la región de suma de comprobación y la tabla de direcciones a verificar.

65518-65529

FFEE-FFF9

....

 

 

Datos de identificación y suma de comprobación para el área de la ROM 57344 a la 65535 ($E000 a la $FFFF--para más información, vea la ubicación 49152, $C000):

ByteUso
65518/FFEE Fecha de revisión D1 y D2 (BCD de cuatro bits)
65519/FFEF Fecha de revisión M1 y M2
65520/FFF0 Fecha de revisión Y1 y Y2
65521/FFF1 Byte de opción; debe ser 1 para el 1200XL (en mi 800XL es 2)
65522-26/FFF2-6Número de pieza en formato AANNNNNN
65527/FFF7 Número de revisión (de nuevo, en el mío es 2)
65528-9/FFF8-9 Suma de comprobación, bytes (byte menos significativo/byte más significativo)

En la revisión A de la ROM 400/800, las ubicaciones 65527 y 65528 deben ser igual a 221 ($DD) y 87 ($57). Para la ROM B, deben ser igual a 243 ($F3) y 230 ($E6). Para las versiones PAL, deben ser igual a 214/87 ($D6/$57) y 34/88 ($22/$58), respectivamente. En el 1200XL, la ubicación 65527 debe ser igual a 10 para la revisión A, e igual a 11 para la revisión B. En el 600XL, debe ser igual a 1, y en el 800XL, debe ser igual a 2. Para el 1200XL, la ubicación 64728 ($FCD8) debe ser distinta a 162 ($A2).

65530-65535

FFFA-FFFF

Vectores de la máquina

 

 

Contiene los vectores de los servicios NMI, RESET (encendido) e IRQ. Sus valores iniciales son 49176 ($C018), 49834 ($C2AA) y 49196 ($C02C), respectivamente.